package org.example.top41_80;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class main45 {
    //括号生成
    //输入：n = 3
    //输出：["((()))","(()())","(())()","()(())","()()()"]
    //确定dfs函数参数l，r括号剩余数量，以及当前的字符串的样子curStr
    //递归终止条件 l，r剩余数量都为0
    //只要左括号还有剩余，添加一个左括号 (
    //当剩余右括号数量多于左括号数量（l < r）时，才能添加右括号 )
    public static List<String> res=new ArrayList<>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        List<String>res= generateKuoHao(n);
        System.out.println(res);
    }

    private static List<String> generateKuoHao(int n) {
        int l=n;
        int r=n;
        String curStr="";
        dfs(l,r,curStr);
        return res;
    }

    private static void dfs(int l, int r, String curStr) {
        if(l==0&&r==0){
            res.add(curStr);
            return ;
        }
        if(l>=0){
            dfs(l-1,r,curStr+"(");
        }
        if(l<r){
            dfs(l,r-1,curStr+")");
        }
    }

}
